package org.agent.aigccore.model.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 分页响应对象
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "分页响应对象")
public class PageResponse<T> extends Response<List<T>> {
    
    /**
     * 当前页码
     */
    @Schema(description = "当前页码", example = "1")
    private int page;
    
    /**
     * 每页条数
     */
    @Schema(description = "每页条数", example = "10")
    private int size;
    
    /**
     * 总记录数
     */
    @Schema(description = "总记录数", example = "100")
    private long total;
    
    /**
     * 总页数
     */
    @Schema(description = "总页数", example = "10")
    private int totalPages;
    
    /**
     * 创建分页成功响应
     * 
     * @param list 数据列表
     * @param page 当前页码
     * @param size 每页条数
     * @param total 总记录数
     * @param <T> 数据类型
     * @return 分页响应对象
     */
    public static <T> PageResponse<T> success(List<T> list, int page, int size, long total) {
        PageResponse<T> response = new PageResponse<>();
        response.setSuccess(true);
        response.setMessage("查询成功");
        response.setData(list);
        response.setPage(page);
        response.setSize(size);
        response.setTotal(total);
        response.setTotalPages((int) Math.ceil((double) total / size));
        response.setTimestamp(System.currentTimeMillis());
        return response;
    }
    
    /**
     * 创建分页成功响应（带自定义消息）
     * 
     * @param list 数据列表
     * @param message 响应消息
     * @param page 当前页码
     * @param size 每页条数
     * @param total 总记录数
     * @param totalPages 总页数
     * @param <T> 数据类型
     * @return 分页响应对象
     */
    public static <T> PageResponse<T> success(List<T> list, String message, int page, int size, long total, int totalPages) {
        PageResponse<T> response = new PageResponse<>();
        response.setSuccess(true);
        response.setMessage(message);
        response.setData(list);
        response.setPage(page);
        response.setSize(size);
        response.setTotal(total);
        response.setTotalPages(totalPages);
        response.setTimestamp(System.currentTimeMillis());
        return response;
    }
    
    /**
     * 设置请求路径
     * 
     * @param path 请求路径
     * @return 当前响应对象
     */
    @Override
    public PageResponse<T> withPath(String path) {
        this.setPath(path);
        return this;
    }
}